<?php


namespace services;


use interfaces\ProviderInterface;
use app\models\routine\RoutineTemplate;

class SubscribeTemplateService implements ProviderInterface
{
    // 订单发货提醒(送货)
    const ORDER_POSTAGE_SUCCESS = 1128;
    // 体现成功通知
    const USER_EXTRACT = 1470;
    // 确认收货通知
    const ORDER_TAKEOVER = 1481;
    // 订单取消
    const ORDER_CLONE = 1134;
    // 订单发货提醒(快递)
    const ORDER_DELIVER_SUCCESS = 1458;
    // 核销成功通知
    const ORDER_WRITE_OFF = 3116;
    // 新订单通知
    const ORDER_NEW = 1476;
    // 退款通知
    const ORDER_REFUND = 1451;
    // 订单支付通知
    const ORDER_PAY_SUCCESS = 755;
    // 申请退款通知 管理员提醒
    const ORDER_REFUND_STATUS = 1468;
    // 积分到账提醒
    const INTEGRAL_ACCOUNT = 335;

    /**
     * @param string $code
     * @return array|mixed|string
     */
    public static function getConstants($code ='')
    {
        $oClass = new \ReflectionClass(__CLASS__);
        $stants = $oClass->getConstants();
        if ($code) return isset($stants[$code]) ? $stants[$code] : '';
        else return $stants;
    }

    /**
     * @param $config
     */
    public function register($config)
    {
    }

    /**
     * 根据模板编号获取模板ID
     * @param string $tempKey
     * @return string
     */
    public static function setTemplateId($tempKey = '')
    {
        if ($tempKey == '') return '';
        return RoutineTemplate::where('tempkey', $tempKey)->where('type', 0)->where('status', 1)->value('tempid');
    }

    /**
     * 发送订阅模板消息
     * @param string $tempCode 所需下发的模板编号
     * @param string $openId 接收者（用户）的 openid
     * @param array $dataKey 模板内容，不填则下发空模板
     * @param string $link 点击模板卡片后的跳转页面，仅限本小程序内的页面。支持带参数,（示例index?foo=bar）。该字段不填则模板无跳转
     */
    public function sendTemplate(string $tempCode, string $openId, array $dataKey, string $link = '')
    {
        if (!$openId || !$tempCode) return false;
        return MiniProgramService::sendSubscribeTemlate($openId, trim(self::setTemplateId(self::getConstants($tempCode))), $dataKey, $link);
    }
}